병원브랜드전략연구소 · GEO 모니터링 플랫폼

디자인 토큰 & 컴포넌트 명세

클로드 디자인 프로젝트 13개 화면에서 인라인 스타일을 전수 파싱해 추출한 실측값과, 피그마로 옮기기 전에 정리할 항목의 확정안입니다. 그대로 따라 쌓으면 됩니다.

화면 13 색상 59 → 24 타입 크기 22 → 8 라운드 15 → 6 컴포넌트 17 추출일 2026-08-14

이 문서의 모든 값은 고정폭으로 조판했습니다 — 그대로 복사해 피그마에 넣으면 되는 실측값이라는 뜻입니다. 회색 바탕의 견본 영역은 제품의 실제 CSS로 렌더한 살아있는 컴포넌트입니다. 스크린샷이 아니라 실물이므로 호버도 동작합니다.

색상59개 사용 → 24개 → 정규화 후 17개

추출된 59개 중 1~2회만 쓰인 일회성 값을 걷어내면 아래 24개가 실질적인 팔레트입니다. 여기서 gray 계열 7개를 slate로 합치면 17개가 최종입니다 — 정규화 확정안 3번에 대응표가 있습니다. 아래 표는 정규화 전 실측값입니다.

브랜드 · 액션

토큰 제안값빈도용도
brand/500
#2563eb194기본 액션, 링크, 활성 상태, 포커스, 데이터 채움
brand/600
#1d4ed898호버, 배지 위 텍스트
brand/50
#eff6ff39선택 배경, 아바타 바탕
brand/100
#dbeafe29섹션 테두리, "이 고객 전용" 배지
brand/900
#1e3a8a16사이드바 활성 항목, 사용자 아바타
brand/disabled
#93b4f54비활성 기본 버튼

중립 — 표면과 텍스트

토큰 제안값빈도용도
surface/0
#ffffff301카드, 모달, 입력 필드
surface/1
#f8fafc82페이지 바탕, 행 호버, 보조 패널
surface/2
#f1f5f998막대 트랙, 옅은 구분선, 중립 배지
border/base
#e2e8f0181카드·입력 테두리 (기본)
border/strong
#cbd5e191사이드바 링크 텍스트, 비활성 체크
text/muted
#94a3b8205캡션, 라벨, 플레이스홀더급 보조 텍스트
text/secondary
#64748b162본문 보조, 설명문
text/tertiary
#47556940사이드바 버전 문자열
text/body
#33415575표 셀 값, 게이지 라벨
text/primary
#0f172a195제목, 강조 수치 · 사이드바 바탕
sidebar/raised
#1e293b101사이드바 호버·셀렉트·크레딧 박스

시맨틱

역할배경전경사용처
성공 / 유지
#dcfce7#15803d"유지중" 배지, 저장 완료 알림, 완료 상태
주의 / 보류
#fef3c7#b45309"보류중" 배지
위험 / 삭제
#fef2f2#dc2626삭제 버튼, 오류 메시지 (테두리 #fecaca)
안내 박스
#fffbeb#a16207"메일이 오지 않았다면" (테두리 #fde68a)

플랫폼 브랜드 색

대시보드 언급률 막대에만 쓰입니다. 액센트와 별개로 관리하세요.

플랫폼값아이콘 에셋
ChatGPT
#10a37fassets/platform-gpt.png
Gemini
#6366f1assets/platform-gemini.png
Perplexity
#0d9488assets/platform-perplexity.png
Copilot
#0ea5e9assets/platform-copilot.png

타이포그래피실측 22개 크기 → 확정 8개

서체는 시스템 스택 하나입니다: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans KR", "Apple SD Gothic Neo", sans-serif. 데이터·버전 문자열에만 ui-monospace, SFMono-Regular, Menlo를 씁니다. 웨이트는 600 / 700 두 개뿐이고 800은 로그인 히어로 1회입니다.

0.5px 단위 제거가 이 문서의 유일한 강제 결정입니다. 실측 12.5 13.5 14.5 15.5 16.5 18.5가 총 518회 등장합니다. 같은 군 안에서는 내림을 택했습니다 — 반올림과 달리 레이아웃이 커지지 않아 기존 화면이 깨지지 않습니다.

아래가 확정 스케일입니다. 크기 8개 · 텍스트 스타일 10개. 실측 22개 크기가 전부 여기로 흡수됩니다.

확정스타일명흡수하는 실측값역할견본
34 / 800display26 · 36 · 38 · 40로그인 히어로AI가 추천하는 병원
21 / 700title-lg21 · 22페이지 제목 · 인증 화면 제목GEO 현황 대시보드
18 / 700title-md19 · 18 · 18.5모달 제목 · 아바타 이니셜병원 등록 정보
16 / 700title-sm16 · 16.5 · 17카드 제목 · 인풋 텍스트병원 운영 채널
15 / 600body-strong15 · 15.5 · 16.5버튼 · 강조 라벨리포트 생성
15 / 400body15 · 15.5본문 기본 · 폼 라벨 · 메뉴등록된 채널을 기준으로 산출합니다
14 / 600body-sm-strong14 · 14.5표 수치 · 값 라벨65%
14 / 400body-sm14 · 14.5보조 텍스트 · 표 셀 · 칩최근 수집일 2026-08-11
13 / 600label13 · 13.5배지 · 열 헤더 · 필터유지중
12 / 400caption12 · 12.5캡션 · 버전 문자열진단 이력 없음

굵기는 400 · 600 · 700 세 개로 충분합니다. 800은 로그인 히어로 1곳뿐이라 display 스타일에 흡수했습니다. 실측 18px 중 14회는 텍스트가 아니라 아이콘·아바타 치수이므로 텍스트 스타일이 아닙니다 — 컴포넌트 크기로 관리하세요.

대시보드 게이지 숫자는 컨테이너 쿼리로 반응합니다. font-size: clamp(14px, 24cqw, 34px) — 도넛 폭에 비례해 커집니다. 피그마에서는 34px / 700 고정으로 두고 축소 케이스만 별도 변형으로 만드세요.

간격 · 라운드 · 선

간격 (gap 실측)

4의 배수를 기본으로 하되 홀수(5·7·9)가 상당수 섞여 있습니다. 아래 8단계로 정리하면 전체의 약 90%를 덮습니다.

값빈도대표 용도시각
4px28사이드바 항목 간, 아이콘-텍스트 밀착
6px48칩 내부, 인라인 아이콘
8px89칩 그룹, 폼 라벨-필드
10px95가장 흔함 — 버튼 그룹, 아바타-텍스트
12px57카드 내부 블록, 사이드바 하단
14px46폼 2열 그리드, 헤더 아바타
18px11대시보드 카드 사이
20px14섹션 사이

모서리 라운드

값빈도적용 대상시각
6px81사이드바 링크, 작은 버튼, 아이콘 히트영역
8px176기본 — 버튼, 인풋, 모달 내부 요소
9 · 10px109본문 버튼, 인증 화면 인풋, 보조 패널
12px34카드
14px7모달
999px79배지, 칩, 진행 막대
50%49아바타, 라디오, 도넛

선과 그림자

역할값비고
테두리 — 기본1px solid #e2e8f0카드, 인풋(본문), 표 헤더
테두리 — 폼(모달)1px solid #d1d5db모달 안 인풋만 다른 회색 ↓
구분선 — 내부1px solid #f1f5f9표 행, 카드 헤더 아래
포커스 링0 0 0 3px rgba(37,99,235,.15)테두리는 #2563eb로 함께 변경
모달 그림자0 24px 60px rgba(0,0,0,.35)배경은 rgba(15,23,42,.5) + blur(6px)
인증 카드 그림자0 24px 60px rgba(15,23,42,.08)비밀번호 찾기 · 회원가입

일반 카드에는 그림자가 없습니다. 1px 테두리만으로 표면을 구분합니다.

버튼4변형 × 3크기

견본 — 제품의 실제 CSS

변형배경테두리전경패딩라운드크기/굵기
Primary#2563eb—#fff9 22815.5 / 600
Primary · hover#1d4ed8—#fff배경만 변경
Primary · 비활성#93b4f5—#fff폼 검증 미통과 시
Secondary#fff#d1d5db#3741519 20815.5 / 600
Secondary · hover#f9fafb#d1d5db#374151배경만 변경
Danger#fff#fecaca#dc26269 18815.5 / 600
Danger · hover#fef2f2#fecaca#dc2626배경만 변경
Ghost (표 행)#fff#e2e8f0#3341556 12814 / 600
Compact (사이드바)#2563eb—#fff4 10613.5 / 600

모달 푸터는 삭제(좌측 정렬) → 여백 → 취소 → 저장 순서로 고정입니다. 삭제는 margin-right:auto로 밀어냅니다.

입력 필드인풋 · 셀렉트 · 텍스트에어리어

위치
병원명 *
메모

견본 — 좌: 기본, 우: 필수 강조(2px 액센트 테두리)

변형테두리패딩라운드글자사용처
기본 (모달)1px #d1d5db9 12815.5모달 폼 전반
필수 강조2px #2563eb10 12816병원명 — 유일한 필수 항목
인라인 추가1px #d1d5db8 12815"카테고리 추가" 입력
본문 검색1px #e2e8f010 161015병원명 검색 (width:380px)
인증 화면1px #e2e8f015 161016로그인·회원가입 (넉넉한 높이)
비밀번호1px #e2e8f015 46 15 161016우측 46px는 눈 아이콘 자리
오류 상태1px #f87171동일아래 #dc2626 / 14.5px 메시지
텍스트에어리어1px #d1d5db10 12815.5min-height:64px, 세로 리사이즈
셀렉트는 네이티브 화살표를 지웠습니다. appearance:none + 우측 패딩 확보 후 14×14 쉐브론 SVG를 position:absolute; right:10~14px로 얹습니다. 사이드바 버전은 padding:9px 34px 9px 20px, 본문 버전은 10px 40px 10px 14px. 피그마에서는 화살표를 컴포넌트 안에 포함시키세요.

인증 코드 입력 (6칸)

견본 — 채워짐 #2563eb / 빈 칸 #e2e8f0 / 오류 #f87171. 테두리 1.5px, 라운드 10px.

상태 배지4변형 · 값이 코드에 고정

병원 관리상태는 제안 · 유지 · 보류 · 종료 4개로 닫혀 있습니다. 목록에서는 원형(제안), 상세 헤더에서는 "~중"이 붙습니다(제안중).

제안 유지 보류 종료 유지중 이 고객 전용 6

견본 — 좌측 4개는 목록형, 이후는 헤더형 · 라벨형 · 카운트형

상태배경전경헤더 라벨
제안#eff6ff#1d4ed8제안중
유지#dcfce7#15803d유지중
보류#fef3c7#b45309보류중
종료#f1f5f9#64748b종료

목록형 13.5px / 600 · padding 3px 10px · 헤더형 13.5px / 700 · 라벨형 13px / 600 · padding 2px 8px · 전부 radius 999px

칩3용도

진료과목 선택, 카테고리·지역 관리, 필터에 각각 다른 칩이 쓰입니다. 형태는 비슷하지만 상호작용이 다르므로 별개 컴포넌트로 만드세요.

진료과목 토글 — 선택 / 미선택

치과 정형외과 피부과 한의원

선택 border #2563eb · bg #eff6ff · text #1d4ed8 / 미선택 #d1d5db · #fff · #4b5563 · padding 6px 13px · 14.5px

카테고리 · 지역 칩 — 카운트 + 편집 + 삭제

임플란트6 ✎✕ ✓

좌: 기본 · 우: 편집 중(테두리 #2563eb, 인풋 폭 72px) — 7개 화면에서 동일

플랫폼 필터

전체 ChatGPT Gemini Perplexity

실제 화면에서는 텍스트 대신 19~20px 플랫폼 아이콘이 들어갑니다. 라운드 8px로 칩과 다릅니다.

라디오 (관리상태 선택)

링 17px / 2px, 점 9px · 선택 #2563eb / 미선택 링 #9ca3af + 투명 점

막대 · 게이지

진행 막대

65%
92%

트랙 h 6px · #f1f5f9 · radius 999px · 채움 #2563eb(기본) 또는 플랫폼 색 · 값 라벨 14px/600 · width 38px · 우측정렬

도넛 게이지

39점
65%
–

견본 — 채움 / 채움 / 데이터 없음

속성값비고
바깥 지름max-width 176px · aspect-ratio 13열 그리드에서 유동
링 구현conic-gradient(#2563eb 0% N%, #e2e8f0 N% 100%)SVG 아님 — 피그마에서는 원형 진행바로
안쪽 구멍74% · #fff링 두께 = 반지름의 13%
데이터 없음background #e2e8f0그라디언트 없이 단색, 라벨은 –
중앙 숫자clamp(14px, 24cqw, 34px) / 700색 #0f172a, line-height 1
하단 라벨15px / 600 · #334155캡션 12px · #94a3b8

카드가장 많이 쓰이는 컨테이너

병원 6
전체
본문 영역
1-10 / 12개1 / 2

견본 — 헤더 + 본문 + 푸터 3단 구조

영역스펙비고
컨테이너#fff · 1px #e2e8f0 · radius 12px그림자 없음. 스크롤 있으면 overflow:hidden
헤더padding 14~16px 20~22px · border-bottom 1px구분선은 #f1f5f9 또는 #e2e8f0 ↓
헤더 제목16~17px / 700 · #0f172a우측에 필터·버튼 배치
헤더 부제14.5px · #94a3b8 · margin-top 5px선택
본문padding 18~26px 20~22px표를 넣을 땐 패딩 0
푸터padding 16px 22px · border-top 1px #f1f5f9검색 + 페이지 크기 + 페이지네이션
카드 간격gap 18px대시보드 2열 그리드

강조 패널 (모달 내부)

진료카테고리 이 고객 전용
쿼리 제안이 이 목록에서만 카테고리를 고릅니다.

border #dbeafe · bg #f8fafc · radius 10px · padding 14px 16px — 7개 화면 반복

푸터 · 빈 상태 · 스텝

목록 푸터 (검색 + 페이지 크기 + 페이지네이션)

1-10 / 12개 10개
‹ 1 / 2 ›

화살표 26×26 · 1px #e2e8f0 · radius 8px · 카운트 13.5px #94a3b8 — 대시보드 4개 카드에서 반복

빈 상태

등록된 채널이 없습니다.
우측 상단 "채널 추가"를 눌러 홈페이지·블로그·SNS 주소를 등록해주세요.

padding 52px 20~22px · 15px #94a3b8 · line-height 1.7 · 2행 구조(현상 + 다음 행동)

스텝 인디케이터 — 회원가입 3단계 / 비밀번호 찾기 2단계

✓ 이메일 입력
이메일 인증
비밀번호 입력

완료 ✓ #2563eb · 현재 점 #2563eb · 라벨 700 #0f172a · 대기 점 #cbd5e1 · 라벨 #94a3b8 · 연결선 56×2px (지난 구간 #2563eb) · 열 폭 96px(회원가입) / 106px(비밀번호)

페이지 셸

유형스펙화면
앱 셸flex · min-height 100vh · bg #f8fafc · 사이드바 240px + 본문 flex 19개
본문 패딩28px 32px (일부 28px 36px · 하단 56px)—
인증 셸 (분할)flex · 좌 56% #f1f5f9 + 우 46% #fff로그인
인증 셸 (카드)bg #eef2f7 · 카드 max-width 1080px · radius 20px회원가입 · 비밀번호 찾기

정규화 확정안6건 · 그대로 적용하면 됩니다

13개 화면을 실측하니 6가지가 어긋나 있었습니다. 각각 아래로 확정했습니다. 판단 기준은 하나입니다 — 가장 많이 쓰인 값을 남기고, 애매하면 레이아웃이 커지지 않는 쪽을 택한다. 6건 모두 최대 1px 차이라 눈에 보이는 변화는 없습니다.

1. 0.5px 글자 크기 → 내림으로 정수화

518회 등장. 내림이면 기존 레이아웃이 절대 커지지 않아 줄바꿈이 깨지지 않습니다. 반올림하면 14.5→15처럼 커지는 값이 생겨 표 열 폭이 밀립니다.

실측확정영향
12.512버전 문자열 — 변화 없음
13.513배지 · 열 헤더 · 필터
14.514가장 많음(188회) — 표 셀 · 칩 · 보조 텍스트
15.515모달 폼 · 버튼 라벨
16.515큰 버튼 — 15/600으로 흡수해 버튼 텍스트를 1개로 통일
18.518인증 완료 제목 1곳
1716카드 제목 — 16과 역할이 같아 통합
1918모달 제목 — 21로 올리면 2px 커지므로 18로 내림
2221인증 화면 제목 — 페이지 제목과 통합

2. 테두리 회색 → #e2e8f0 하나로

본문은 #e2e8f0(181회), 모달 폼만 #d1d5db(70회)를 씁니다. 같은 역할에 두 값이 쓰일 근거가 코드에 없고, #d1d5db는 slate가 아니라 gray 계열이라 아래 3번과도 충돌합니다. 전부 #e2e8f0으로 통일합니다 — 모달 인풋이 아주 미세하게 밝아지지만 카드·본문 인풋과 톤이 맞습니다.

3. gray 계열 → slate 계열로 통일

Tailwind slate와 gray가 섞여 있습니다. 나란히 놓으면 gray 쪽이 살짝 누렇게 보입니다. 다수인 slate로 통일합니다.

현재 (gray)확정 (slate)용도
#111827
#0f172a
모달 입력 텍스트 (50회)
#374151
#334155
폼 라벨 · 보조 버튼 텍스트 (80회)
#4b5563
#475569
미선택 칩 텍스트
#6b7280
#64748b
날짜 입력 텍스트
#9ca3af
#94a3b8
플레이스홀더 · 미선택 라디오 링
#d1d5db
#e2e8f0
폼 테두리 — 2번과 동일 건
#f9fafb
#f8fafc
보조 버튼 호버

이걸 적용하면 색상 24개가 17개로 줄고, 팔레트가 slate + blue + 시맨틱 4색으로 깔끔하게 정리됩니다.

4. 카드 헤더 패딩 → 2가지로

현재 12·13·14·16px × 20·22px 조합이 6가지입니다. 실제로는 역할이 둘뿐입니다.

역할확정흡수
카드 헤더16px 22px14×20 · 16×20 · 16×22 · 13×20 — 최다 사용값
표 열 헤더12px 22px12×22(8회) — 조밀해야 하므로 유지

5. 구분선 → 위치로 결정

같은 자리에 #e2e8f0과 #f1f5f9가 섞여 있습니다. 규칙을 이렇게 고정합니다.

위치확정근거
카드·모달 바깥 테두리#e2e8f0표면 경계는 또렷해야 함
카드·모달 내부 구분선#f1f5f9헤더 아래, 푸터 위, 표 행 사이

6. 라운드 → 6단계

실측확정적용 대상
2 · 3 · 5 · 6 · 76사이드바 링크 · 작은 버튼 · 아이콘 히트영역
8 · 98기본 — 버튼 · 인풋 · 셀렉트 (9는 본문 버튼, 8로 통일)
10 · 1110인증 화면 인풋 · 강조 패널 · 코드 입력칸
1212카드
14 · 16 · 2014모달 · 인증 카드
999 · 50%999 / 50%배지 · 칩 · 막대 / 아바타 · 라디오 · 도넛

덤으로 발견한 것

같은 모달인데 카테고리 카운트가 화면마다 다릅니다. 업체등록 관리의 freshCats()는 하드코딩된 숫자를 쓰고(임플란트 111), hospital-modal.js의 freshCats()는 실제 등록 쿼리를 셉니다(강남치과병원 임플란트 2). 같은 병원을 두 경로로 열면 다른 수가 보입니다. 디자인 이슈는 아니지만 개발로 넘길 때 짚어주세요 — 실제 쿼리를 세는 쪽이 맞습니다.
빈 화면이 하나 있습니다. 진단 > 채널 설정.dc.html은 원본이 206바이트짜리 빈 껍데기(<x-dc></x-dc>)입니다. 임포트 실패가 아니라 클로드 디자인에 그 상태로 저장돼 있습니다. 피그마에서 만들 화면은 12개입니다.

구축 순서

의존 관계상 아래 순서가 되돌아가는 작업이 가장 적습니다.

  1. 변수(Variables) 먼저 — 색 17개. 정규화 3번을 적용한 값으로 등록합니다. #2563eb가 아니라 brand/500으로 부르기 시작해야 이후 컴포넌트가 전부 따라옵니다. 여기서 gray를 섞어 넣으면 끝까지 따라다닙니다.
  2. 텍스트 스타일 10개. 확정 스케일 그대로 — 크기 8개, 굵기 400 / 600 / 700.
  3. 이펙트 스타일 3개. 포커스 링, 모달 그림자, 인증 카드 그림자. 카드에는 그림자가 없다는 점을 기억하세요.
  4. 프리미티브. 버튼(4변형×3크기) → 입력 필드(8변형) → 배지(4상태) → 칩(3용도, 편집 불리언 포함) → 라디오 → 진행 막대. 칩과 라디오의 on/off 속성을 여기서 제대로 만들어두면 모달 변형이 2개로 끝납니다.
  5. 사이드바 — 변형 8개. 활성 항목 7개 + 없음. 9개 화면에 100% 동일하므로 이걸 먼저 만들어두면 이후 모든 앱 화면이 인스턴스 하나로 시작합니다.
  6. 모달 — 변형 2개. 신규 / 수정. 나머지 케이스는 4번에서 만든 자식 컴포넌트의 상태로 처리합니다. 7개 화면이 이 인스턴스 하나를 공유합니다.
  7. 카드 · 페이지 헤더 · 목록 푸터. 슬롯을 둔 컨테이너로 만들어 내용만 교체하도록.
  8. 화면 12개 조립. 앱 화면 9개 → 인증 화면 3개 순서. 앱 화면은 사이드바 인스턴스 + 본문이라 빠르게 진행됩니다.

데이터 시각화(도넛·막대)는 피그마에서 정적 프레임으로 두는 편이 낫습니다. 도넛은 conic-gradient라 원형 진행바 플러그인이나 아크 도형으로 근사해야 하고, 값이 바뀔 일이 없으면 노력 대비 효용이 낮습니다.